package com.weitu.workflow.definition.service;

import com.alibaba.fastjson.JSONObject;
import com.weitu.permission.user.entity.User;
import com.weitu.workflow.definition.entity.WorkFlowDefinition;
import org.fireflow.engine.definition.WorkflowDefinition;
import org.fireflow.engine.definition.WorkflowDefinitionInfo;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;

/**
 * 工作流定义管理
 * 进行工作流定义的创建管理
 * Created by Administrator on 2017/3/17.
 */
public interface WorkflowDefService {
    public void saveWorkflow();

    /***
     * 查询工作流定义数量
     * @return
     */
    @Transactional(readOnly = true)
    public int queryWorkflowDefCount(Map<String,Object> paramMap);

    /***
     * 查询工作流定义集合
     * @return
     */
    @Transactional(readOnly = true)
    public List<WorkflowDefinitionInfo> queryWorkflowDefList(Map<String,Object> paramMap);
    /***
     * 查询工作流定义集合（用于数据表格显示，返回自定义的工作流类型）
     * @return
     */
    @Transactional(readOnly = true)
    public List<WorkFlowDefinition> queryWorkflowDefTableList(Map<String,Object> paramMap);

    /***
     * 生成流程定义
     * @processId 流程id
     * @return
     */
    public String generateWorkflowDef(String processId);
    /***
     * 删除流程定义副本
     * @param processId
     */
    public void deleteWorkflowDefinitionCopy(String processId);

    /***
     * 生成流程环节节点
     * @param processId
     * @param nodeType
     * @return
     */
    public JSONObject generateNode(Map<String,Object> params);
    /***
     * 拖拽移动环节节点
     * @param params
     * @return
     */
    public JSONObject dragNode(Map<String,Object> params);

    /***
     * 修改节点名称
     * @param processId 流程id
     * @param nodeType 节点类型
     * @param displayName 节点名称
     * @return
     */
    public JSONObject updateNodeName(String processId,int nodeType,String nodeName,String displayName);
    /***
     * 修改节点属性
     * @param processId 流程id
     * @param nodeType 节点类型
     * @param displayName 节点名称
     * @return
     */
    public JSONObject updateNodeAttribute(String processId,int nodeType,String nodeName,String attributeName,String attributeValue);
    /***
     * 删除节点
     * @param processId 流程id
     * @param nodeType 节点类型
     * @param nodeName 节点名称
     * @return
     */
    public JSONObject deleteNode(String processId,int nodeType,String nodeName);
    /***
     * 保存流程定义
     * @param processId 流程id
     * @return
     */
    public JSONObject saveFlowDef(String processId);

    /***
     * 根据流程id查询流程定义信息
     * @param processId
     * @return
     */
    public JSONObject queryFlowDefInfo(String processId);








    /***
     * 新建或修改流程定义信息
     * @param workflowDefObject
     * @return
     */
    public boolean createOrUpdateWorkflowDef(JSONObject workflowDefObject,User user);

    /***
     * 根据processId查询流程定义信息
     * @param processId
     * @return
     */
    public JSONObject queryWorkflowDefByProcessId(String processId);
}
